package cn.edu.jxau.test;

import java.util.Arrays;
import java.util.Objects;
import java.util.Vector;

import cn.edu.jxau.util.LinkedQueue;
import cn.edu.jxau.util.Queue;

/**
 * @author Fudashi
 */
public class Main {

	public static void main(String[] args) {
		print(1);
	}

	// ------------------------------
	// 利用字符串表示大数实现
	// ------------------------------
//	private static void print(int n) {
//		if (n <= 0) {
//			throw new IllegalArgumentException("参数必须是正数");
//		}
//		char[] num = new char[n];
//		for (int i = 0; i < num.length; i++) {
//			num[i] = '0';
//		}
//		while (!increment(num)) {
//			print(num);
//		}
//	}
//
//	private static boolean increment(char[] num) {
//		boolean carry = false;
//		for (int i = num.length - 1; i >= 0; i--) {
//			int n = num[i] - '0';
//			if (i == num.length - 1) {
//				n++;
//			}
//			if (carry) {
//				n++;
//			}
//			if (n >= 10) {
//				if (i == 0) { // 溢出
//					return true;
//				} else {
//					carry = true;
//					num[i] = (char) ('0' + n - 10);
//				}
//			} else {
//				num[i] = (char) ('0' + n);
//				break;
//			}
//		}
//		return false;
//	}

	// -------------------------------
	// 全排列
	// -------------------------------

	private static void print(int n) {

		if (n <= 0) {
			throw new IllegalArgumentException("参数必须是正数");
		}
		char[] num = new char[n];
		for (int i = 0; i < 10; i++) {
			num[0] = (char) (i + '0');
			print(num, n, 0);
		}
	}

	private static void print(char[] num, int n, int index) {
		
		if (n == index + 1) {
			printNum(num);
			return;
		}
		for (int i = 0; i < 10; i++) {
			num[index + 1] = (char) (i + '0');
			print(num, n, index + 1);
		}
	}

	private static void printNum(char[] num) {

		int start = 0;
		while (start<num.length && num[start] == '0') {
			start++;
		}
		for (int i = start; i < num.length; i++) {
			System.out.print(num[i]);
		}
		System.out.println();
	}
}